package educar.controllers;

import educar.gui.AdminView;
import educar.gui.IView;
import educar.models.Cargo;
import educar.models.cargoNotFound;

public class AdminCargoController implements IController
{
    AdminView view;

    public void setView(IView view)
    {
        this.view = (AdminView)view;
        actualizarCargos();
    }

    public void processItemList(String name, String item)
    {
        Cargo cargo = null;
        try
        {
            cargo = Cargo.getCargobyId(name);
        }
        catch (cargoNotFound e)
        {
            e.printStackTrace();
        }

        view.setCargoCodigo(cargo.getCodigoCargo());
        view.setCargoNombre(cargo.getDescripcionCargo());
    }

    public void process(String model)
    {
        if (model.compareTo(AdminView.RESET) == 0)
            reset();
        else if (model.compareTo(AdminView.ACTUALIZAR) == 0)
            update();
        else if (model.compareTo(AdminView.GUARDARNUEVO) == 0)
            guardar();
        else if (model.compareTo(AdminView.BORRAR) == 0)
            borrar();
    }

    private void reset()
    {
        view.setCargoCodigo("");
        view.setCargoNombre("");
    }

    private void update()
    {
        if (view.getCargoNombre().trim().isEmpty())
        {
            view.present("Ingrese un nombre");
            return;
        }
        try
        {
            Cargo c = Cargo.getCargobyId(view.getCargoCodigo());
            c.setDescripcion(view.getCargoNombre());
            c.update();
        }
        catch (cargoNotFound e)
        {
            view.present("Actualizacion no valida");
        }
    }

    private void guardar()
    {
        if (view.getCargoNombre().trim().isEmpty())
        {
            view.present("Ingrese un nombre");
            return;
        }
        Cargo c = new Cargo(view.getCargoNombre());
        if (!c.save())
            view.present("Error al guardar");
        else
        {
            view.setCargoCodigo(c.getCodigoCargo());
            actualizarCargos();
        }
    }

    private void actualizarCargos()
    {
        String[] c = Cargo.getAllCargosArray();
        ((AdminView)view).setCargos(c);
    }

    private void borrar()
    {
        try
        {
            Cargo cargo = Cargo.getCargobyId(view.getCargoCodigo());
            cargo.destroy();
            reset();
            actualizarCargos();
        }
        catch (cargoNotFound e)
        {
            view.present("Cargo inexistente");
        }
    }
}
